import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Principal actor del juego.
 * @author Alvaro Alvarez Castanon 
 * @version 1.0
 */
public class Burbuja extends Actor
{
    int numImpacto;
    int x, y;
    GreenfootImage azul = null;
    GreenfootImage amarillo = null;
    GreenfootImage verde = null;
    GreenfootImage rojo = null;
    Actor bull=null;
    
    /**
     * Constructor de la clase burbuja, obtiene los paramertos iniciales para el actor.
     */
    public Burbuja(int cant)
    {
        azul = new GreenfootImage("azul.png");
        amarillo = new GreenfootImage("amarillo.png");
        verde = new GreenfootImage("verde.png");
        rojo = new GreenfootImage("rojo.png");
        numImpacto=cant;
        cambia();
    }
    
    /**
     * Metodo de accion de la clase burbuja,se le indica en este metodo lo que realizara
     * el actor durante el juego, desde el cambio en los diferentes estados como la generacion de las balas.
     */
    public void act() 
    {
        bull= getOneObjectAtOffset(0, 0, Bala.class);
        if(bull!=null)
        {
            ((Mundo) getWorld()).removeObject(bull);
            numImpacto ++;
            cambia();
        }
        if( Greenfoot.mouseClicked( null ))
        {
          MouseInfo raton = Greenfoot.getMouseInfo();
          Actor personaje=raton.getActor();
          if(personaje == this)
          {
            numImpacto ++;
            cambia();
            //revision();
          }
        }
        if(numImpacto == 5)
        {
            int x = getX();
            int y = getY();
            aumentaPuntos();
            ((Mundo) getWorld()).generaBalas(x,y);
            ((Mundo) getWorld()).disminuyeBurbujas();
            getWorld().removeObject(this);

            
        }
    }    
    
    public void revision()
    {
        if(numImpacto == 5)
        {
            int x = getX();
            int y = getY();
            aumentaPuntos();
            ((Mundo) getWorld()).generaBalas(x,y);
            ((Mundo) getWorld()).disminuyeBurbujas();
            getWorld().removeObject(this);
        }
        //((Mundo) getWorld()).disminuyeImpactos();
    }
    
    /**
     * Metodo con el cual cada que recibe un impacto se realiza el cambio de la imagen que se tiene para el actor.
     */
    public void cambia()
    {
        switch(numImpacto)
        {
            case 1:
                setImage(azul);
            case 2:
                setImage(amarillo);
                break;
            case 3:
                setImage(verde);
                break;
            case 4:
                setImage(rojo);
                break;
        }
    }
    
    /**
     * hace el llamado para poder aumentar los puntos cuando se realiza la explosion de una burbuja.
     */
    private void aumentaPuntos()
    {
        Mundo mundo = (Mundo) getWorld();
        Puntos punto = mundo.getPoints();
        punto.Count(5);
    }
}
